package com.trinity.uniquefees.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.trinity.common.core.domain.AjaxResult;
import com.trinity.common.core.domain.entity.SysDept;
import com.trinity.common.utils.DateUtils;
import com.trinity.system.service.ISysDeptService;
import com.trinity.uniquefees.domain.UfBookList;
import com.trinity.uniquefees.mapper.UfBookListMapper;
import com.trinity.uniquefees.service.IUfBookListService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.Arrays;
import java.util.List;

/**
 * 数目清单Service业务层处理
 *
 * @author 董诗攀
 * @date 2024-01-30
 */
@Service
public class UfBookListServiceImpl extends ServiceImpl<UfBookListMapper, UfBookList> implements IUfBookListService {
    @Resource
    private UfBookListMapper ufBookListMapper;
    @Resource
    private ISysDeptService sysDeptService;

    /**
     * 查询数目清单
     *
     * @param id 数目清单主键
     * @return 数目清单
     */
    @Override
    public UfBookList selectUfBookListById(String id) {
        return ufBookListMapper.selectUfBookListById(id);
    }

    /**
     * 查询数目清单列表
     *
     * @param ufBookList 数目清单
     * @return 数目清单
     */
    @Override
    public List<UfBookList> selectUfBookListList(UfBookList ufBookList) {
        return ufBookListMapper.selectUfBookListList(ufBookList);
    }
    /**
     * 新增数目清单
     *
     * @param ufBookList 数目清单
     * @return 结果
     */
    @Override
    public AjaxResult createdUfBookList(UfBookList ufBookList) {
        ufBookList.setId(String.valueOf(System.currentTimeMillis()));
        ufBookList.setCreateTime(DateUtils.getNowDate());
        if (!confClazz(ufBookList)) {
            return AjaxResult.error("请选择班级！");
        }
        return AjaxResult.success(ufBookListMapper.insertUfBookList(ufBookList));
    }
    /**
     * 新增数目清单
     *
     * @param ufBookList 数目清单
     * @return 结果
     */
    @Override
    public int insertUfBookList(UfBookList ufBookList) {
        ufBookList.setId(String.valueOf(System.currentTimeMillis()));
        ufBookList.setCreateTime(DateUtils.getNowDate());
        if (confClazz(ufBookList)) {
            return 0;
        }
        return ufBookListMapper.insertUfBookList(ufBookList);
    }

    /**
     * 根据班级把 学校、学院、专业、班级 都设置进去
     *
     * @param ufBookList 缴费项目
     */
    public boolean confClazz(UfBookList ufBookList){
        Long deptId = ufBookList.getDeptId();
        // 学校 学院 专业 班级 年级
        SysDept dept = sysDeptService.selectDeptById(deptId);
        if (dept == null||!"B".equals(dept.getDeptType())) {
            return false;
        }
        String ancestors = dept.getAncestors();
        Long[] array = Arrays.stream(ancestors.split(","))
                .map(Long::parseLong)
                .toArray(Long[]::new);
        List<SysDept> sysDepts = sysDeptService.selectDeptAncestors(array);
        sysDepts.add(dept);
        for (SysDept deptP : sysDepts) {
            //学校
            if ("X".equals(deptP.getDeptType())) {
                ufBookList.setSchool(deptP.getDeptName());
                ufBookList.setSchoolId(String.valueOf(deptP.getDeptId()));
            }
            //学院
            if ("Y".equals(deptP.getDeptType())) {
                ufBookList.setCollege(deptP.getDeptName());
                ufBookList.setCollegeId(String.valueOf(deptP.getDeptId()));
            }
            //专业
            if ("Z".equals(deptP.getDeptType())) {
                ufBookList.setMajor(deptP.getDeptName());
                ufBookList.setMajorId(String.valueOf(deptP.getDeptId()));
            }
            //班级
            if ("B".equals(deptP.getDeptType())) {
                ufBookList.setClazz(deptP.getDeptName());
                ufBookList.setClazzId(String.valueOf(deptP.getDeptId()));
                //年级
//                ufBookList.setGrade(deptP);
            }
        }
        return true;
    }

    /**
     * 修改数目清单
     *
     * @param ufBookList 数目清单
     * @return 结果
     */
    @Override
    public int updateUfBookList(UfBookList ufBookList) {
        confClazz(ufBookList);
        ufBookList.setUpdateTime(DateUtils.getNowDate());
        return ufBookListMapper.updateUfBookList(ufBookList);
    }

    /**
     * 批量删除数目清单
     *
     * @param ids 需要删除的数目清单主键
     * @return 结果
     */
    @Override
    public int deleteUfBookListByIds(String[] ids) {
        return ufBookListMapper.deleteUfBookListByIds(ids);
    }

    /**
     * 删除数目清单信息
     *
     * @param id 数目清单主键
     * @return 结果
     */
    @Override
    public int deleteUfBookListById(String id) {
        return ufBookListMapper.deleteUfBookListById(id);
    }
}
